package utils;

import java.io.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;

/**
* Dessine l'etat d'un panel donne dans un fichier png. Le fichier png est
* enregistrer par defaut dans le fichier depuis lequel le programme est
* execute. Il est bien sur possible de changer ce repertoire de sortie.
* @author Bruno da Silva
* @since 15.06.2007
* @version 1.0
*/
public class PrintScreen {
	
	/**
	 * Panel a copier dans le fichier
	 */
	private JPanel panel;
	
	/**
	 * Chemin vers le repertoire dans lequel enregistrer l'image
	 */
	private String path = ".";
	
	/**
	 * Compteur pour le numero des images
	 */
	private int nbFiles;
	
	/**
	 * Contruit l'objet et stocke la reference vers le panel a copier
	 * @param Reference vers le panel a copier
	 */
	public PrintScreen (JPanel panel) {
		this.panel = panel;
	}
	
	/**
	 * Dessine le contenu du panel dans un fichier png.
	 * @throws Propagation de l'exception lors de la creation du fichier
	 * et lors de l'ecriture dans ce dernier
	 */
	public void photo() throws IOException{
		// Creation du fichier png
		File file = new File(path + "/Image " + ++nbFiles + ".png");
		file.createNewFile();
		
		// Creation du buffer depuis le panel
		BufferedImage saveBuffer = new BufferedImage(
			panel.getSize().width,panel.getSize().height,
			BufferedImage.TYPE_3BYTE_BGR);
		
		// Obtention du contexte graphique dans lequel dessiner
		Graphics g = saveBuffer.getGraphics();
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, panel.getSize().width,panel.getSize().height);
		// Dessine dans le contenu du panel dans le contexte graphique
		panel.paint(g);
		// Ecriture du contenu du buffer dans le fichier png
		ImageIO.write(saveBuffer, "PNG", file);
	}
	
	/**
	 * Permets a l'utilisateur de choisir un repertoire dans lequel enregistrer
	 * les images png
	 */
	public void setPath() {
		// Creation de l'objet permettant a l'utilisateur de choisir un repertoire
		JFileChooser chooser = new JFileChooser(new File(path));
		chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
		
		// Stocke le chemin si l'utilisateur confirme son choix
		if (chooser.showOpenDialog(new JFrame("Test")) == JFileChooser.APPROVE_OPTION)
		{
			path = chooser.getCurrentDirectory().toString();
		}
	}
}